import type { PageParams, PageResult } from '@vben/types';

import { requestClient } from '#/api/request';

export namespace SpaceApi {
  /**
   * 空间信息
   */
  export interface Space {
    /** 空间ID */
    id: string;
    /** 空间名称 */
    name: string;
    /** 空间描述 */
    description?: string;
    /** 空间图标 */
    icon?: string;
    /** 创建人 */
    createdBy?: string;
    /** 创建时间 */
    createdTime?: string;
    /** 最近修改人 */
    lastModifiedBy?: string;
    /** 最近修改时间 */
    lastModifiedTime?: string;
  }

  /**
   * 创建空间请求参数
   */
  export interface CreateSpaceRequest {
    /** 空间名称 */
    name: string;
    /** 空间描述 */
    description?: string;
    /** 空间图标 */
    icon?: string;
  }

  /**
   * 更新空间请求参数
   */
  export interface UpdateSpaceRequest {
    /** 空间ID */
    id: string;
    /** 空间名称 */
    name?: string;
    /** 空间描述 */
    description?: string;
    /** 空间图标 */
    icon?: string;
  }
}

/**
 * 获取所有空间
 */
export function getSpaceList() {
  return requestClient.get<SpaceApi.Space[]>('/spaces');
}

/**
 * 分页获取空间
 * @param params 分页参数
 */
export function getSpaceListByPage(params: PageParams & Record<string, any>) {
  return requestClient.post<PageResult<SpaceApi.Space>>('/spaces/page', params);
}

/**
 * 获取空间详情
 * @param spaceId 空间ID
 */
export function getSpaceDetail(spaceId: string) {
  return requestClient.get<SpaceApi.Space>(`/spaces/${spaceId}`);
}

/**
 * 创建空间
 * @param params 创建参数
 */
export function createSpace(params: SpaceApi.CreateSpaceRequest) {
  return requestClient.post<SpaceApi.Space>('/spaces', params);
}

/**
 * 更新空间
 * @param spaceId 空间ID
 * @param params 更新参数
 */
export function updateSpace(spaceId: string, params: Omit<SpaceApi.UpdateSpaceRequest, 'id'>) {
  return requestClient.put<SpaceApi.Space>(`/spaces/${spaceId}`, params);
}

/**
 * 删除空间
 * @param spaceId 空间ID
 */
export function deleteSpace(spaceId: string) {
  return requestClient.delete(`/spaces/${spaceId}`);
}
